gui: Expose if there are any configured sync folders in systray class to QML
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 11 Mar 2025 07:31:46 +0000 (15:31 +0800)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 13 Mar 2025 10:31:45 +0000 (10:31 +0000)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
src/gui/systray.cpp
src/gui/systray.h

index bcf683658e7e22878b6d2d333b7d53fc0e3fede6..6837073cea4636ffb743c099f8acc44e555bb442 100644 (file)
@@ -109,6 +109,9 @@ Systray::Systray()
     connect(AccountManager::instance(), &AccountManager::accountAdded,
         this, [this]{ showWindow(WindowPosition::Center); });
 #endif
+
+    connect(FolderMan::instance(), &FolderMan::folderListChanged, this, &Systray::slotSyncFoldersChanged);
+    slotSyncFoldersChanged(FolderMan::instance()->map());
 }
 
 void Systray::create()
@@ -490,6 +493,14 @@ void Systray::slotPauseAllFolders()
     setPauseOnAllFoldersHelper(true);
 }
 
+void Systray::slotSyncFoldersChanged(const OCC::Folder::Map &folderMap)
+{
+    if (const auto currentAnySyncFolders = !folderMap.isEmpty(); currentAnySyncFolders != _anySyncFolders) {
+        _anySyncFolders = currentAnySyncFolders;
+        emit anySyncFoldersChanged();
+    }
+}
+
 void Systray::setPauseOnAllFoldersHelper(bool pause)
 {
     // For some reason we get the raw pointer from Folder::accountState()
@@ -610,6 +621,11 @@ void Systray::setSyncIsPaused(const bool syncIsPaused)
     emit syncIsPausedChanged();
 }
 
+bool Systray::anySyncFolders() const
+{
+    return _anySyncFolders;
+}
+
 /********************************************************************************************/
 /* Helper functions for cross-platform tray icon position and taskbar orientation detection */
 /********************************************************************************************/
index db2e3d7b9ddf3b9a4c83c79fb2a5525113416c1d..6e18a596c70e8c12ff888a99986bdc68db2793f8 100644 (file)
@@ -69,6 +69,7 @@ class Systray : public QSystemTrayIcon
     Q_PROPERTY(QString windowTitle READ windowTitle CONSTANT)
     Q_PROPERTY(bool useNormalWindow READ useNormalWindow CONSTANT)
     Q_PROPERTY(bool syncIsPaused READ syncIsPaused WRITE setSyncIsPaused NOTIFY syncIsPausedChanged)
+    Q_PROPERTY(bool anySyncFolders READ anySyncFolders NOTIFY anySyncFoldersChanged)
     Q_PROPERTY(bool isOpen READ isOpen WRITE setIsOpen NOTIFY isOpenChanged)
     Q_PROPERTY(bool enableAddAccount READ enableAddAccount CONSTANT)
 
@@ -92,6 +93,7 @@ public:
     Q_REQUIRED_RESULT bool useNormalWindow() const;
 
     Q_REQUIRED_RESULT bool syncIsPaused() const;
+    Q_REQUIRED_RESULT bool anySyncFolders() const;
     Q_REQUIRED_RESULT bool isOpen() const;
 
     [[nodiscard]] bool enableAddAccount() const;
@@ -113,6 +115,7 @@ signals:
     void showErrorMessageDialog(const QString &error);
 
     void syncIsPausedChanged();
+    void anySyncFoldersChanged();
     void isOpenChanged();
 
     void hideSettingsDialog();
@@ -158,6 +161,7 @@ private slots:
     void slotUpdateSyncPausedState();
     void slotUnpauseAllFolders();
     void slotPauseAllFolders();
+    void slotSyncFoldersChanged(const OCC::Folder::Map &foldeMap);
 
 private:
     // Argument allows user to specify a specific dialog to be raised
@@ -183,6 +187,8 @@ private:
 
     bool _isOpen = false;
     bool _syncIsPaused = true;
+    bool _anySyncFolders = false;
+
     std::unique_ptr<QQmlApplicationEngine> _trayEngine;
     QPointer<QMenu> _contextMenu;
     QSharedPointer<QQuickWindow> _trayWindow;